Day 07 解決了一個問題:
Routing Table 裡有很多條 Route 時,Router 怎麼選?
答案是先找出符合 Destination IP 的 Route,再選 Longest Prefix Match。
但是~~
Routing Table 裡的 Route,到底是誰放進去的?
之前做 Static Route,是自己手動設定:
ip route 192.168.30.0 255.255.255.0 10.0.0.2
意思是:
要去 192.168.30.0/24,就先交給 10.0.0.2。
小網路可以這樣做。但 Router 變成幾十台,或某條線突然斷掉,難道還要一台一台登入修改?
這就是 Dynamic Routing Protocol 要處理的問題,也是今天第一次真正碰到 OSPF 的地方。
假設 R1 到 R3 有兩條路:
R1 → R2 → R3
R1 → R4 → R3
如果只設定主要走 R2,後來 R1 和 R2 之間斷線,Router 不會因此自動「發明」一條經過 R4 的 Route。
工程師可以事先設定備援 Static Route,也可以使用 Dynamic Routing Protocol,讓 Router 交換路由資訊並重新計算路徑。
差別可以先記成:
Static Route
→ 人告訴 Router 怎麼走
Dynamic Routing
→ Router 交換資訊,自動學路與重新算路
Static Route 並不是不好,而是每一條路都要由人規劃與維護。網路越大,維護成本就越高。
OSPF 全名是:
Open Shortest Path First
目前先把它翻成人話:
Router 交換網路的 Link-State 資訊,各自算出通往目的網段的路徑。
當網路拓撲改變,例如原本的路斷掉,OSPF 會重新計算仍然可達的路徑。
但 OSPF 不是負責把 Packet 搬到終點。更精確的流程是:
OSPF 學路、算路
↓
計算結果進入 Routing Table
↓
Packet 到達 Router
↓
Router 查 Routing Table
↓
Longest Prefix Match
↓
Forwarding
所以 Day 07 的 Longest Prefix Match 沒有被 OSPF 取代。
OSPF 負責產生 Route;Packet 真正進來後,Router 還是查 Routing Table 做 Forwarding。
看到 Shortest Path First,我以為是:
經過的 Router 越少越好。
但 OSPF 比較的是整條路徑累積的 Cost。
例如:
Path A:5 + 10 + 5 = 20
Path B:8 + 8 = 16
即使兩條路經過的 Router 數量不同,OSPF 仍會偏好總 Cost 較低的 Path B。
所以 Shortest 指的不是地圖上的距離,也不是 Router 數量,而是:
哪條路徑的累積 Cost 最低。
在 Cisco 常見的 OSPF 計算方式中:
OSPF Cost
= Reference Bandwidth ÷ Interface Bandwidth
若 Reference Bandwidth 是 100 Mbps:
10 Mbps → Cost 10
100 Mbps → Cost 1
大方向是:
頻寬越高
→ Cost 越低
→ OSPF 越偏好
但 Cost 不是頻寬本身,而是 OSPF 用來比較路徑的 Metric。
傳統 Reference Bandwidth 是 100 Mbps,因此 100 Mbps、1 Gbps、10 Gbps 的 Cost 都可能被算成 1,無法區分高速介面。
這時可以提高 Reference Bandwidth,例如設成 10000 Mbps:
100 Mbps → Cost 100
1 Gbps → Cost 10
10 Gbps → Cost 1
重點不是背數字,而是理解:
Reference Bandwidth 決定 OSPF 用什麼尺度比較介面速度。
實際調整時,各台 OSPF Router 應使用一致的 Reference Bandwidth,避免算出不一致的 Cost。
假設一條 1 Gbps 的線路,目前已經用了 980 Mbps。
OSPF 不會因為這一刻很塞,就自動提高它的 Cost。
Cost ≠ 即時流量
Cost ≠ Ping
Cost ≠ Latency
Cost 是 OSPF 的選路 Metric,不是即時交通偵測器。
工程師也可以手動設定介面 Cost:
interface GigabitEthernet0/1
ip ospf cost 50
例如讓主要線路 Cost 10、備援線路 Cost 100,OSPF 平常就會偏好主要線路。
查看介面 Cost 與 OSPF Route,可以使用:
show ip ospf interface
show ip route ospf
Routing Table 裡可能看到:
O 192.168.30.0/24 [110/20] via 10.0.0.2
目前先認得後面的 20 是 OSPF Metric。前面的 110 是 Administrative Distance,留到後面再拆。
假設通往同一個目的網段有兩條路:
Path A:Total Cost = 10
Path B:Total Cost = 10
這時就會碰到 ECMP:
Equal-Cost Multi-Path
也就是到同一個目的地,有多條總 Cost 相同的路徑。
OSPF 可以把多條等成本路徑放進 Routing Table,讓 Router 使用它們進行 Forwarding。
可以把 ECMP 記成一句:
一樣便宜,就不一定只能留一條路。
至於流量怎麼分散,以及不同設備能保留幾條等成本路徑,之後再拆。
Routing Table 不是 OSPF,也不只會放 OSPF Route。
裡面的 Route 可能來自:
Connected
Static
OSPF
其他 Routing Protocol
OSPF 只是 Route 的來源之一。
把 Day 07 和 Day 08 接起來,完整流程就是:
OSPF 學路、算路
↓
較低 Cost 的 Route 進入 Routing Table
↓
Packet 到達 Router
↓
Longest Prefix Match
↓
Forwarding
如果有多條相同 Prefix、相同 Cost 的 OSPF 路徑,則可能形成 ECMP。
看到:
Path A:1 + 1 + 1 = 3
Path B:2 + 2 = 4
即使 Path A 經過比較多段,也應該知道 OSPF 會偏好 Path A,因為它比較的是累積 Cost,不是 Router 數量。